The automation of a human user's interactions with one or more computer systems has become an evolving and increasing trend in Internet Technology (IT) and software development domains. Automating traditional human interactions was intended to reduce the cost and increase the efficiency of human resources required to perform those duties. In addition, automation is beneficial as it can eliminate errors and inaccuracies often introduced by the fatigue and external distractions that a human user may be susceptible to.
Currently, automating the interaction with computers systems involves defining the explicit procedures required to perform those interactions, usually by some form of script, macro, or workflow. For this reason, the robustness and complexity of those interactions are limited to what has been specifically included in the automation procedures, and requires that such procedures account for all possible system states or responses during their execution. As a result, these procedures cannot account for unexpected deviations in the computer system which may result in the unintended behavior or ultimate failure of the automation. Ultimately, the verbosity and precision required by traditional automation procedures can increase build and maintenance costs over time in order to account for these limitations, and in some cases, erode the expected return on investment that automation intends to provide.
Other drawbacks may also be present.